﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using projecto_asp.Models;
using System.Globalization;
using System.Diagnostics;

namespace projecto_asp.Controllers
{
    public class CoordenadorController : Controller
    {

        private bd1Entities bd = new bd1Entities();
        //
        // GET: /Coordenador/

        public ActionResult Index(string ano = "", string mes = "")
        {

            /* código para o calendário */
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
            if (mes != "")
            {
                mes_local = Int32.Parse(mes);
            }

            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());
            if (ano != "")
            {
                ano_local = Int32.Parse(ano);
            }

            int mes_antes = mes_local - 1;
            int mes_depois = mes_local + 1;

            if (mes_depois == 13)
            {
                ViewBag.mes_antes = 11;
                ViewBag.mes_depois = 1;
                ViewBag.ano_antes = ano_local;
                ViewBag.ano_depois = ano_local + 1;
                ViewBag.nome_mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(mes_local) + "/" + ano_local;
            }
            else if (mes_antes == 0)
            {
                ViewBag.mes_antes = 12;
                ViewBag.mes_depois = 2;
                ViewBag.ano_antes = ano_local - 1;
                ViewBag.ano_depois = ano_local;
                ViewBag.nome_mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(mes_local) + "/" + ano_local;
            }
            else
            {
                ViewBag.ano_antes = ano_local;
                ViewBag.ano_depois = ano_local;
                ViewBag.mes_antes = mes_antes;
                ViewBag.mes_depois = mes_depois;
                ViewBag.nome_mes = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(mes_local) + "/" + ano_local;
            }

            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            ViewBag.cod_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            modelProfessorDisciplina.id_docente = cod_professor;
            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = true;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            Session["coordenador"] = true;

            ViewBag.aprovarCalendario = true;

            /*-------*/

            return View();
        }

        public ActionResult defRegras()
        {
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());

            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            ViewBag.cod_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            modelProfessorDisciplina.id_docente = cod_professor;
            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = true;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            Session["coordenador"] = true;

            ViewBag.aprovarCalendario = true;

            /*-------*/

            regra modelRegra = new regra();
            coordenadorAno modelCoordenadorAno = new coordenadorAno();
            int ultimaRegra = modelRegra.getUltimaRegra();
            short codCursoCoordenado = modelCoordenadorAno.getCurso(cod_professor, ano_letivo);
            ViewBag.ultimaRegra = ultimaRegra;
            ViewBag.cursoCoordenador = codCursoCoordenado;

            /*auto generated*/
            //ViewBag.cod_curso = new SelectList(bd.cursoes, "cod_curso", "discricao");
            ViewBag.id_tipo_epoca = new SelectList(bd.tipo_epoca, "id_tipo_epoca", "descricao");

            return View(modelRegra);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult defRegras(regra modelRegra)
        {

            /* Valores a passar para a interface de confirmação */
            if (ModelState.IsValid)
            {
                Session["regra"] = modelRegra;

                int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());

                return RedirectToAction("confirmarRegra", new { Id = cod_professor });
            }
            else
            {
                int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
                int ano_local = Int32.Parse(DateTime.Now.Year.ToString());

                disciplina modelDisciplina = new disciplina();
                calendarModel modelCalendario = new calendarModel();
                docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();

                modelCalendario.ano = ano_local;
                modelCalendario.mes = mes_local;

                int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
                ViewBag.cod_docente = cod_professor;

                var ano_letivo = modelCalendario.getAnoLetivoAtual();
                ViewBag.ano_letivo = ano_letivo;
                ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

                modelProfessorDisciplina.id_docente = cod_professor;
                Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

                ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

                /*-------*/
                ViewBag.log_out = true;
                ViewBag.coordenador = true;
                ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

                Session["coordenador"] = true;

                ViewBag.aprovarCalendario = true;

                /*-------*/

                coordenadorAno modelCoordenadorAno = new coordenadorAno();
                int ultimaRegra = modelRegra.getUltimaRegra();
                short codCursoCoordenado = modelCoordenadorAno.getCurso(cod_professor, ano_letivo);
                ViewBag.ultimaRegra = ultimaRegra;
                ViewBag.cursoCoordenador = codCursoCoordenado;

                /*auto generated*/
                //ViewBag.cod_curso = new SelectList(bd.cursoes, "cod_curso", "discricao");
                ViewBag.id_tipo_epoca = new SelectList(bd.tipo_epoca, "id_tipo_epoca", "descricao");

                return View(modelRegra);
            }
        }

        public ActionResult confirmarRegra()
        {
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());

            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            ViewBag.cod_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            modelProfessorDisciplina.id_docente = cod_professor;
            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = true;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            Session["coordenador"] = true;

            ViewBag.aprovarCalendario = true;

            /*-------*/

            regra modelRegra = (regra)Session["regra"];
            tipo_epoca modelTipoEpoca = new tipo_epoca();

            int cod_epoca = modelRegra.id_tipo_epoca;
            string descricao = modelTipoEpoca.getDescricao(cod_epoca);
            ViewBag.descricaoEpoca = descricao;

            return View();
        }

        public ActionResult guardarRegra()
        {
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());

            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            ViewBag.cod_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            modelProfessorDisciplina.id_docente = cod_professor;
            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = true;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            Session["coordenador"] = true;

            ViewBag.aprovarCalendario = true;

            /*-------*/

            regra modelRegra = (regra)Session["regra"];
            tipo_epoca modelTipoEpoca = new tipo_epoca();

            int cod_epoca = modelRegra.id_tipo_epoca;
            string descricao = modelTipoEpoca.getDescricao(cod_epoca);
            ViewBag.descricaoEpoca = descricao;

            bd.regras.AddObject(modelRegra);
            bd.SaveChanges();

            ViewBag.lista_regras = modelRegra.getListaRegras(modelRegra.cod_curso);

            return View();
        }

        public ActionResult aplRegras()
        {
            int mes_local = Int32.Parse(DateTime.Now.Month.ToString());
            int ano_local = Int32.Parse(DateTime.Now.Year.ToString());

            disciplina modelDisciplina = new disciplina();
            calendarModel modelCalendario = new calendarModel();
            docenteDisciplina modelProfessorDisciplina = new docenteDisciplina();

            modelCalendario.ano = ano_local;
            modelCalendario.mes = mes_local;

            int cod_professor = Int32.Parse(RouteData.Values["Id"].ToString());
            ViewBag.cod_docente = cod_professor;

            var ano_letivo = modelCalendario.getAnoLetivoAtual();
            ViewBag.ano_letivo = ano_letivo;
            ViewBag.lista_dias = modelCalendario.dadosPreenchimentoCalendario(cod_professor, true);

            modelProfessorDisciplina.id_docente = cod_professor;
            Dictionary<string, Dictionary<string, List<disciplina>>> lista_lecciona = modelProfessorDisciplina.getDisciplinaLeccionada(ano_letivo);

            ViewBag.lista_disciplinas_leccionadas = lista_lecciona;

            /*-------*/
            ViewBag.log_out = true;
            ViewBag.coordenador = true;
            ViewBag.hora = DateTime.Now.ToString("dd-MMMM-yyyy HH:mm");

            Session["coordenador"] = true;

            ViewBag.aprovarCalendario = true;

            /*-------*/

            regra modelNovaRegra = new regra();
            coordenadorAno modelCoordenadorAno = new coordenadorAno();
            short codCursoCoordenado = modelCoordenadorAno.getCurso(cod_professor, ano_letivo);

            ViewBag.lista_regras = modelNovaRegra.getListaRegras(codCursoCoordenado);

            return View();
        }
    }
}
